package com.gzx.plugin.tjzy.modular.project.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gzx.plugin.tjzy.core.entity.CustomVo;
import com.gzx.plugin.tjzy.modular.project.entity.bo.GzxProjectBo;
import com.gzx.plugin.tjzy.modular.project.entity.bo.GzxProjectIdBo;
import com.gzx.plugin.tjzy.modular.project.entity.bo.GzxProjectQueryBo;
import com.gzx.plugin.tjzy.modular.project.entity.bo.GzxProjectTileBo;
import com.gzx.plugin.tjzy.modular.project.entity.vo.GzxProjectVo;

import java.util.List;
import java.util.Map;

/**
 * 委托公司产品项目Service接口
 */
public interface GzxProjectService {

    /**
     * 根据项目编码获取产品编码
     */
    String getProductCodeByProjectCode(String projectCode);

    /**
     * 分页查询委托公司产品项目列表
     *
     * @param bo 查询条件
     * @return 委托公司产品项目分页列表
     */
    Page<GzxProjectVo> pageList(GzxProjectQueryBo bo);

    /**
     * 查询委托公司产品项目
     *
     * @param id 主键
     * @return 委托公司产品项目
     */
    GzxProjectVo queryById(Long id);

    /**
     * 查询所有项目
     *
     * @param flag true以自己为维度查询，flase以上级维度查询
     * @param val  项目名称或者编码
     */
    List<CustomVo> listAll(boolean flag, String val);

    /**
     * 新增委托公司产品项目
     *
     * @param bo 委托公司产品项目
     */
    void insertByBo(GzxProjectBo bo);

    /**
     * 修改委托公司产品项目
     *
     * @param bo 委托公司产品项目
     */
    void updateByBo(GzxProjectBo bo);

    /**
     * 校验并批量删除委托公司产品项目信息
     *
     * @param projectIdBo id列表业务对象
     */
    void deleteWithValidByIds(GzxProjectIdBo projectIdBo);

    /**
     * 根据projectcode获取项目名称
     */
    String getProjectNameByCode(String projectCode);

    /**
     * 获取项目平铺
     *
     * @return
     */
    Map<String, GzxProjectTileBo> getProjectTile();
}
